1 package uba.db.column;
2
3 import java.io.DataInput;
4 import java.io.DataOutput;
5
6 import uba.db.column.io.ColumnReader;
7 import uba.db.column.io.ColumnWriter;
8 import uba.db.table.Table;
9
10 /***
11 * Especifica como es una columna (su nombre, y sus constraints) y su "tipo".<br>
12 *
13 * Notar que el "tipo" esta especificado por la clase concreta que implementa
14 * esta interfaz, se pudo haber modelado el tipo explictamente (siendo este un
15 * "type object"), sin embargo como no es necesario cambiar el tipo dinamicamte
16 * ni agrupar instancias (dos de las razones para utilizar un type object) la
17 * complejidad agregada por el uso del type object no estaría del todo
18 * justificada.
19 *
20 * @see "Type Object pattern"
21 *
22 * @version $Revision: 1.3 $
23 */
24 public interface ColumnSpecification {
25 /***
26 * Retorna el nombre de la columna.
27 */
28 String name();
29
30 /***
31 * Retorna <i>true</i> si la columna NO puede ser <i>null</i>.<br>
32 * Este método es un atajo para: constraint().notNull()
33 */
34 boolean notNull();
35
36 /***
37 * Retorna el constraint que existe sobre esta columna (si puede ser o no
38 * null -- o en un futuro si el valor debe estar dentro de un determinado
39 * rango--).
40 */
41 ColumnConstraint constraint();
42
43 /***
44 * Retorna un {@link ColumnReader} especifico para leer la columna que representa
45 * esta especificación.
46 *
47 * @param in el stream que utilizará el reader.
48 */
49 ColumnReader readerFor(DataInput in);
50
51 /***
52 * Retorna un {@link ColumnWriter} especifico para leer la columna que representa
53 * esta especificación.
54 *
55 * @param out el stream que utilizará el reader.
56 */
57 ColumnWriter writerFor(DataOutput out);
58
59 /***
60 * Retorna <i>true</i> si la columna se llama <i>name</i>.<br>
61 * La implementación debe ignorar las mayuculas/minusculas si es necesario.
62 *
63 * @param nameToTest string con el nombre a chequear
64 */
65 boolean isNamed(String nameToTest);
66
67 /***
68 * Retorna un string que representa el tipo de datos de la clase concreta de esta
69 * especificación de columna.<br>
70 * NOTA: este string debe ser utilizado para mostrar el tipo de la columna, nunca
71 * para derivar comportamiento en base a eso.
72 */
73 String dataTypeDisplayString();
74
75 Column asColumnFor(Table table);
76 }